Manual: `F0af`_`[Interfaces ↗`a8d24177d946de4f1f0a0fe1af9a1338:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=docs/markdown/interfaces.md|anchor=configuring-interfaces]`_`f
An `!interface`! is how a Reticulum `F0af`_`[instance`:/page/wiki.mu`path=Instance]`_`f communicates with the outside world.
The interface system is medium-agnostic, so an instance can use a mix of local communication `F0af`_`[hardware`:/page/wiki.mu`path=Hardware]`_`f, remote public endpoints and virtual interfaces. See the `F0af`_`[list of interface types`#types]`_`f below.
>>Contents
• `F0af`_`[Configuration`#configuration]`_`f
• `F0af`_`[Getting started`#getting-started]`_`f
• `F0af`_`[Recommended reading`#recommended-reading]`_`f
• `F0af`_`[Modes`#modes]`_`f
• `F0af`_`[Comparison`#comparison]`_`f
• `F0af`_`[Announce propagation`#announce-propagation]`_`f
• `F0af`_`[Path seeking`#path-seeking]`_`f
• `F0af`_`[Discoverable`#discoverable]`_`f
• `F0af`_`[Auto-connect`#auto-connect]`_`f
• `F0af`_`[Bootstrap`#bootstrap]`_`f
• `F0af`_`[IFAC`#ifac]`_`f
• `F0af`_`[Gravity`#gravity]`_`f
• `F0af`_`[Types`#types]`_`f
• `F0af`_`[See also`#see-also]`_`f
• `F0af`_`[References`#references]`_`f
• `F0af`_`[External links`#external-links]`_`f
>>Configuration
In `F0af`_`[RNS`:/page/wiki.mu`path=RNS]`_`f, interfaces are specified in the `F0af`_`[configuration`:/page/wiki.mu`path=RNS|anchor=configuration]`_`f file under `B100`F9d9[interfaces]`f`b. See `F0af`_`[Common Interface Options ↗`a8d24177d946de4f1f0a0fe1af9a1338:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=docs/markdown/interfaces.md|anchor=common-interface-options]`_`f in the manual for more.
>>Getting started
To connect to the global Reticulum backbone, simply add one or more public endpoints from directory.rns.recipes or rmap.world.`:cite-ref-1[`F5bf`_`[1`#cite-note-1]`_`f]
Rather than relying on static connections, consider using public endpoints as temporary `F0af`_`[bootstrap connections`#bootstrap]`_`f that dynamically discover and `F0af`_`[auto-connect`#auto-connect]`_`f to more suitable ones. This results in a network topology that is more geographically relevant, resilient and efficient. This is the way.`:cite-ref-2[`F5bf`_`[2`#cite-note-2]`_`f]
`*`!Note:`! Reticulum is not a single global network you “join”. It's a toolkit for building all sorts of networks, small or large. How you choose to connect to other peers is up to you.`*`:cite-ref-3[`F5bf`_`[3`#cite-note-3]`_`f]
>>>Recommended reading
• `F0af`_`[Creating a Network With Reticulum ↗`a8d24177d946de4f1f0a0fe1af9a1338:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=docs/markdown/gettingstartedfast.md|anchor=creating-a-network-with-reticulum]`_`f
• `F0af`_`[Bootstrapping Connectivity ↗`a8d24177d946de4f1f0a0fe1af9a1338:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=docs/markdown/gettingstartedfast.md|anchor=bootstrapping-connectivity]`_`f
• `F0af`_`[Connecting Reticulum Instances Over the Internet ↗`a8d24177d946de4f1f0a0fe1af9a1338:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=docs/markdown/gettingstartedfast.md|anchor=connecting-reticulum-instances-over-the-internet]`_`f
>>Modes
Interface modes let you control how `F0af`_`[announces propagate`#announce-propagation]`_`f and how `F0af`_`[paths are discovered`#path-seeking]`_`f, indirectly affecting how `F0af`_`[transport nodes`:/page/wiki.mu`path=Transport_node]`_`f route traffic. Properly configured interfaces can adapt network usage to different scenarios, such as fast backbone links, slow radio segments, or mobile connections.`:cite-ref-4[`F5bf`_`[4`#cite-note-4]`_`f]
>>>Comparison
`t
| Name | Path expiration | Path seeking | Propagates announces to |
|---|---|---|---|
| full | 7 days | ❌ | full boundary roaming gateway internal |
| gateway / gw | 7 days | ✅ | full boundary roaming gateway internal |
| access_point / ap | 1 day | ✅ | full boundary roaming gateway internal |
| boundary | 7 days | ❌ | full boundary gateway |
| internal | 7 days | ✅ | full boundary gateway internal |
| roaming | ¼ day | ✅ | full gateway internal |
`t
>>>>full
The default mode. Lack of path seeking means it can only answer network queries for announces it has seen directly.
Unless running as a `F0af`_`[transport node`:/page/wiki.mu`path=Transport_node]`_`f, it is generally best to use `B100`F9d9full`f`b.
>>>>gateway
Basically `B100`F9d9full`f`b + path seeking on behalf of its clients.
If an interface is `F0af`_`[discoverable`#discoverable]`_`f, `F0af`_`[RNS`:/page/wiki.mu`path=RNS]`_`f will automatically force the mode `B100`F9d9gateway`f`b (or `B100`F9d9access_point`f`b for `F0af`_`[RNodes`:/page/wiki.mu`path=RNode]`_`f).
`*`!Tip:`! If you want to allow other `F0af`_`[peers`:/page/wiki.mu`path=Peer]`_`f to widely resolve paths or connect to a wider network through an interface, put it in `B100`F9d9gateway`f`b mode. By creating a chain of `B100`F9d9gateway`f`b interfaces, peers can immediately resolve paths to any destination along the chain.`*
>>>>access_point
Silent until `F0af`_`[requested`:/page/wiki.mu`path=Path|anchor=request]`_`f; ideal for radio connections. Announces will never propagate over `B100`F9d9access_point`f`b interfaces, but path seeking allows it to resolve paths on behalf of its clients. Lower expiration time ensures fewer stale paths.
If an `F0af`_`[RNode`:/page/wiki.mu`path=RNode]`_`f interface is `F0af`_`[discoverable`#discoverable]`_`f, `F0af`_`[RNS`:/page/wiki.mu`path=RNS]`_`f will automatically force the mode `B100`F9d9access_point`f`b.
>>>>boundary
Marks an edge to a network segment that is significantly different from the current one.
For example, if the instance is part of a low-bandwidth LoRa segment but also has a high-bandwidth Internet connection over a `B100`F9d9BackboneInterface`f`b, then `*that`* interface should be set to `B100`F9d9boundary`f`b.
>>>>internal
Protected inner segment. Announces from `B100`F9d9boundary`f`b interfaces will not propagate over `B100`F9d9internal`f`b interfaces. Path seeking still allows its clients to resolve paths across any `B100`F9d9boundary`f`b interfaces on the instance.
>>>>roaming
Mobile interfaces. Low expiration time reduces the need to test paths that may no longer be valid due to movement. Announces are only broadcast to `B100`F9d9full`f`b, `B100`F9d9gateway`f`b and `B100`F9d9internal`f`b interfaces, keeping downstream connections clean from transient paths.
>>>Announce propagation
`F0af`_`[Announces`:/page/wiki.mu`path=Announce]`_`f propagate across a node's interfaces depending on their modes, according to the following rules:`:cite-ref-5[`F5bf`_`[5`#cite-note-5]`_`f]
`t
| From ↓ To → | full | access_point | boundary | roaming | gateway | internal |
|---|---|---|---|---|---|---|
| full | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
| gateway | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
| access_point | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
| boundary | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ |
| internal | ✅ | ❌ | ✅ | ❌ | ✅ | ✅ |
| roaming | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
`t
✅ Will rebroadcast announce.
❌ Will not rebroadcast announce.
The tools Reticulum Announce Propagation Simulator and Reticulated may be used to visualize how announces propagate.
In `F0af`_`[RNS`:/page/wiki.mu`path=RNS]`_`f, you can disable announce propagation from `B100`F9d9internal`f`b interfaces to a specific interface by setting `B100`F9d9announces_from_internal = false`f`b on that interface. Paths to destinations on `B100`F9d9internal`f`b interfaces may still be resolved via the interface if it provides `F0af`_`[path seeking`#path-seeking]`_`f.
Setting `B100`F9d9announces_to_internal = true`f`b on a `B100`F9d9boundary`f`b interface will allow announce propagation from that interface to any `B100`F9d9internal`f`b interfaces. Likewise, `B100`F9d9autoconnect_announces_to_internal = true`f`b does the same for `F0af`_`[auto-connected`#auto-connect]`_`f interfaces if `B100`F9d9autoconnect_interface_mode = boundary`f`b.
>>>Path seeking
`*See also: `F0af`_`[Path#Request`:/page/wiki.mu`path=Path|anchor=request]`_`f`*
Any `F0af`_`[node`:/page/wiki.mu`path=Node]`_`f that has no path to a `F0af`_`[destination`:/page/wiki.mu`path=Destination]`_`f can send out a path request on the network. An interface that supports `!path seeking`! will attempt to recursively resolve `F0af`_`[path requests`:/page/wiki.mu`path=Path|anchor=request]`_`f it receives. See the `F0af`_`[comparison`#comparison]`_`f table above for which interface modes support path seeking by default.
In `F0af`_`[RNS`:/page/wiki.mu`path=RNS]`_`f, it is possible to force path seeking on individual `B100`F9d9boundary`f`b and `B100`F9d9full`f`b interfaces by setting `B100`F9d9recursive_prs = true`f`b.
`*`!Note:`! In the manual and code, this is sometimes called "path discovery". On this wiki, the term "path seeking" is used to avoid confusion with `F0af`_`[interface discovery`:/page/wiki.mu`path=Discovery]`_`f.`*
>>Discoverable
`*See also: `F0af`_`[Discovery`:/page/wiki.mu`path=Discovery]`_`f`*
By making an interface `!discoverable`!, other `F0af`_`[peers`:/page/wiki.mu`path=Peer]`_`f can `F0af`_`[discover`:/page/wiki.mu`path=Discovery]`_`f, verify, and `F0af`_`[auto-connect`:/page/wiki.mu`path=Discovery|anchor=auto-connect]`_`f to it. Discoverable interfaces periodically broadcast `F0af`_`[announce`:/page/wiki.mu`path=Announce]`_`f packets with connection details, which are propagated over the network. The announce can be encrypted with a `F0af`_`[network identity`:/page/wiki.mu`path=Network_identity]`_`f, ensuring the interface is only discoverable on trusted networks. It can also include the interface's `F0af`_`[IFAC`#ifac]`_`f.`:cite-ref-6[`F5bf`_`[6`#cite-note-6]`_`f]
In `F0af`_`[RNS`:/page/wiki.mu`path=RNS]`_`f, to make an interface discoverable, set `B100`F9d9discoverable = true`f`b in its definition. For more, see `F0af`_`[Discovery Parameters ↗`a8d24177d946de4f1f0a0fe1af9a1338:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=docs/markdown/interfaces.md|anchor=discovery-parameters]`_`f in the manual.
`*`!Note:`! A discoverable interface announces its presence, capabilities and (if configured) location to the network. This may have security implications.`*
>>Auto-connect
`*See also: `F0af`_`[Discovery#Auto-connect`:/page/wiki.mu`path=Discovery|anchor=auto-connect]`_`f`*
Reticulum can `!auto-connect`! to discovered interfaces, automatically bringing interfaces up and down based on their availability.
In `F0af`_`[RNS`:/page/wiki.mu`path=RNS]`_`f, enable interface discovery with `B100`F9d9discover_interfaces = true`f`b and set `B100`F9d9autoconnect_discovered_interfaces`f`b to a number greater than `B100`F9d90`f`b.
>>>Bootstrap
`*See also: `F0af`_`[Discovery#Bootstrapping`:/page/wiki.mu`path=Discovery|anchor=bootstrapping]`_`f`*
Interfaces can be configured as temporary `!bootstrap`! connections, discovering and auto-connecting to more suitable connections before disconnecting themselves.
In `F0af`_`[RNS`:/page/wiki.mu`path=RNS]`_`f, to use an interface for bootstrapping, set `B100`F9d9bootstrap_only = true`f`b in its definition. It relies on interface discovery and auto-connection, so make sure these features are also enabled in the `F0af`_`[configuration`:/page/wiki.mu`path=RNS|anchor=configuration]`_`f (see `F0af`_`[above`#auto-connect]`_`f).
>>IFAC
`*See also: `F0af`_`[Interface Access Code`:/page/wiki.mu`path=Interface_Access_Code]`_`f`*
Interfaces can be configured with an `!IFAC`! to control who can communicate directly with the interface.
In `F0af`_`[RNS`:/page/wiki.mu`path=RNS]`_`f, to enable IFAC on an interface, simply specify a `B100`F9d9network_name`f`b and/or a `B100`F9d9passphrase`f`b in its definition.
>>Gravity
In `F0af`_`[RNS`:/page/wiki.mu`path=RNS]`_`f, interfaces may be given a `!gravity`!. If multiple interfaces receive the same `F0af`_`[announce`:/page/wiki.mu`path=Announce]`_`f, the interface with the highest `B100`F9d9gravity`f`b wins the `F0af`_`[path`:/page/wiki.mu`path=Path]`_`f table entry. This is especially useful for `F0af`_`[transport nodes`:/page/wiki.mu`path=Transport_node]`_`f with public endpoints where users continually connect and disconnect, resulting in stale paths.
The default gravity is `B100`F9d90`f`b by default, or a number defined by `B100`F9d9default_gravity`f`b (and `B100`F9d9autoconnect_interface_gravity`f`b for when `F0af`_`[auto-connecting`#auto-connect]`_`f).`:cite-ref-7[`F5bf`_`[7`#cite-note-7]`_`f]
>>Types
`F0af`_`[RNS`:/page/wiki.mu`path=RNS]`_`f has a wide range of built-in interface types:
• `B100`F9d9`F0af`_`[AutoInterface`:/page/wiki.mu`path=AutoInterface]`_`f`f`b – IPv6 multicast-based peer discovery (docs).
• `B100`F9d9BackboneInterface`f`b – High-performance, resource-efficient interface for Linux/Android (docs).
• `B100`F9d9TCPServerInterface`f`b – Allows `B100`F9d9TCPClientInterface`f`bs to connect over the Internet or private IPv4/IPv6 networks (docs).
• `B100`F9d9TCPClientInterface`f`b – Connects to a remote `B100`F9d9TCPServerInterface`f`b over the Internet or private IPv4/IPv6 networks (docs).
• `B100`F9d9UDPInterface`f`b – Provides UDP-based communication (docs).
• `B100`F9d9I2PInterface`f`b – Routes data through the I2P network for anonymous communication (docs).
• `B100`F9d9RNodeInterface`f`b – Interfaces with an `F0af`_`[RNode`:/page/wiki.mu`path=RNode]`_`f for digital radio communication (docs).
• `B100`F9d9RNodeMultiInterface`f`b – For RNodes with multiple LoRa transceivers, allows sub-interfaces to be configured individually (docs).
• `B100`F9d9SerialInterface`f`b – Enables communication over serial lines and devices (docs).
• `B100`F9d9PipeInterface`f`b – Interfaces with any program via `B100`F9d9stdin`f`b and `B100`F9d9stdout`f`b (docs).
• `B100`F9d9KISSInterface`f`b – Interfaces with KISS protocol-compatible packet radio modems (docs).
• `B100`F9d9AX25KISSInterface`f`b – Interfaces with AX.25 KISS protocol devices for amateur radio communication (docs).
• `B100`F9d9WeaveInterface`f`b – Interfaces with `F0af`_`[Weave`:/page/wiki.mu`path=Weave]`_`f devices over serial connections (source).
As well as support for custom interfaces`:cite-ref-8[`F5bf`_`[8`#cite-note-8]`_`f]:
• `B100`F9d9BLEInterface`f`b – BLE interface for Linux systems.
• `B100`F9d9FreeDVInterface`f`b – Plug and play, cross-platform sound modem interface for HF radios using the FreeDV API.
• `B100`F9d9Meshtastic_Interface`f`b – Interface for using Meshtastic as the underlying networking layer.
• `B100`F9d9Modem73Interface`f`b – Interface for modem73. Enables any HF/VHF/UHF radio to operate with Reticulum.
• `B100`F9d9RNodeTCPInterface`f`b – A modified version of `B100`F9d9RNodeInterface`f`b that supports TCP connections only.
• `B100`F9d9SX126xInterface`f`b – Drives SX1262 LoRa chips directly over SPI on Linux SBCs. No `F0af`_`[R`:/page/wiki.mu`path=RNode]`_`f`F0af`_`[Node`:/page/wiki.mu`path=RNode]`_`f needed.
• retiqr – An alternative reticulum QR + USB HID interface (via `B100`F9d9TCPClientInterface`f`b).
• RNS-over-HTTP – Tunnels traffic over standard HTTP/S POST requests (via `B100`F9d9PipeInterface`f`b).
>>See also
• `F0af`_`[Discovery`:/page/wiki.mu`path=Discovery]`_`f
• `F0af`_`[Interface Access Code`:/page/wiki.mu`path=Interface_Access_Code]`_`f
• `F0af`_`[rnstatus`:/page/wiki.mu`path=Rnstatus]`_`f
>>References
`:cite-note-1`!1.`! `F0af`_`[↑`#cite-ref-1]`_`f `*Connect to the Distributed Backbone`*, Manual. `F0af`_`[`a8d24177d946de4f1f0a0fe1af9a1338:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=docs/markdown/gettingstartedfast.md|anchor=connect-to-the-distributed-backbone] ↗`_`f
`:cite-note-2`!2.`! `F0af`_`[↑`#cite-ref-2]`_`f `*Finding Your Way`*, Manual. `F0af`_`[`a8d24177d946de4f1f0a0fe1af9a1338:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=docs/markdown/gettingstartedfast.md|anchor=finding-your-way] ↗`_`f
`:cite-note-3`!3.`! `F0af`_`[↑`#cite-ref-3]`_`f `*Bootstrapping Connectivity`*, Manual. `F0af`_`[`a8d24177d946de4f1f0a0fe1af9a1338:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=docs/markdown/gettingstartedfast.md|anchor=bootstrapping-connectivity] ↗`_`f
`:cite-note-4`!4.`! `F0af`_`[↑`#cite-ref-4]`_`f `*Interface Modes`*, Manual. `F0af`_`[`a8d24177d946de4f1f0a0fe1af9a1338:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=docs/markdown/interfaces.md|anchor=interface-modes] ↗`_`f
`:cite-note-5`!5.`! `F0af`_`[↑`#cite-ref-5]`_`f `*Announce Propagation Rules`*, Manual. `F0af`_`[`a8d24177d946de4f1f0a0fe1af9a1338:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=docs/markdown/understanding.md|anchor=announce-propagation-rules] ↗`_`f
`:cite-note-6`!6.`! `F0af`_`[↑`#cite-ref-6]`_`f `*Discoverable Interfaces`*, Manual. `F0af`_`[`a8d24177d946de4f1f0a0fe1af9a1338:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=docs/markdown/interfaces.md|anchor=discoverable-interfaces] ↗`_`f
`:cite-note-7`!7.`! `F0af`_`[↑`#cite-ref-7]`_`f `*Help Testing: Interface Gravity`*, rns.recipes Community Forum (2026-07-23). Web / NomadNet: `F0af`_`[`9ce92808be498e9e05590ff27cbfdfe4:/page/forum/thread.mu`cat=general|thread=help-testing-interface-gravity] ↗`_`f
`:cite-note-8`!8.`! `F0af`_`[↑`#cite-ref-8]`_`f `*Interfaces`*, Manual. `F0af`_`[`a8d24177d946de4f1f0a0fe1af9a1338:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=docs/markdown/interfaces.md|anchor=configuring-interfaces] ↗`_`f
>>External links
• Reticulum Announce Propagation Simulator
• Reticulated
• Reticulum Primer – Outdated, but still a valuable resource with several example arrangements.
>>Reticulum concepts
`F0af`_`[Announce`:/page/wiki.mu`path=Announce]`_`f • `F0af`_`[Blackhole`:/page/wiki.mu`path=Blackhole]`_`f • `F0af`_`[Buffer`:/page/wiki.mu`path=Buffer]`_`f • `F0af`_`[Channel`:/page/wiki.mu`path=Channel]`_`f • `F0af`_`[Destination`:/page/wiki.mu`path=Destination]`_`f • `F0af`_`[Discovery`:/page/wiki.mu`path=Discovery]`_`f • `F0af`_`[Identity`:/page/wiki.mu`path=Identity]`_`f • `F0af`_`[Instance`:/page/wiki.mu`path=Instance]`_`f • Interface • `F0af`_`[Interface Access Code`:/page/wiki.mu`path=Interface_Access_Code]`_`f (IFAC) • `F0af`_`[Link`:/page/wiki.mu`path=Link]`_`f • `F0af`_`[Network identity`:/page/wiki.mu`path=Network_identity]`_`f • `F0af`_`[Node`:/page/wiki.mu`path=Node]`_`f • `F0af`_`[Packet`:/page/wiki.mu`path=Packet]`_`f • `F0af`_`[Path`:/page/wiki.mu`path=Path]`_`f • `F0af`_`[Propagation node`:/page/wiki.mu`path=Propagation_node]`_`f • `F0af`_`[Resource`:/page/wiki.mu`path=Resource]`_`f • `F0af`_`[Stamp`:/page/wiki.mu`path=Stamp]`_`f • `F0af`_`[Transport node`:/page/wiki.mu`path=Transport_node]`_`f
>>Interface
`!Source:`! `F0af`_`[Interface.py ↗`a8d24177d946de4f1f0a0fe1af9a1338:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=RNS/Interface.py]`_`f